package cn.iocoder.yudao.module.digital.dal.dataobject.cardkeyorder;

import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.handlers.AbstractJsonTypeHandler;
import lombok.*;

import java.util.List;

/**
 * 卡密订单 DO
 *
 * @author 超管
 */
@TableName(value = "digital_cardkey_order", autoResultMap = true)
@KeySequence("digital_cardkey_order_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库，可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CardkeyOrderDO extends BaseDO {

    /**
     * 主键
     */
    @TableId(type = IdType.INPUT)
    private String id;

    /**
     * 来源
     */
    private Integer source;

    /**
     * 订单状态
     */
    private String orderStatus;
    /**
     * 错误描述
     */
    private String errorMsg;

    /**
     * 发卡渠道订单id
     */
    private String channelOrderId;

    /**
     * 发卡渠道内部订单id
     */
    private String channelInnerOrderId;

    /**
     * 卡密商品数量
     */
    private Integer productQuantity;

    /**
     * 卡密商品
     */
    @TableField(typeHandler = ProductTypeHandler.class)
    private List<CardkeyOrderProductDO> products;

    /**
     * 卡密密钥数量
     */
    private Integer cardQuantity;

    /**
     * 卡密密钥
     */
    @TableField(typeHandler = CardTypeHandler.class)
    private List<CardkeyOrderCardSecretDO> cards;

    public static class CardTypeHandler extends AbstractJsonTypeHandler<Object> {

        @Override
        protected Object parse(String json) {
            return JsonUtils.parseArray(json, CardkeyOrderCardSecretDO.class);
        }

        @Override
        protected String toJson(Object obj) {
            return JsonUtils.toJsonString(obj);
        }

    }

    public static class ProductTypeHandler extends AbstractJsonTypeHandler<Object> {

        @Override
        protected Object parse(String json) {
            return JsonUtils.parseArray(json, CardkeyOrderProductDO.class);
        }

        @Override
        protected String toJson(Object obj) {
            return JsonUtils.toJsonString(obj);
        }

    }
}